widget: Always update the CSS node
authorBenjamin Otte <otte@redhat.com>
Mon, 19 Oct 2020 23:50:12 +0000 (01:50 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 20 Oct 2020 02:50:12 +0000 (04:50 +0200)
Anybody who keeps their own CSS nodes around or wants to order CSS nodes
different from widgets will from now on have to do it manually all the
time.

This is outdated behavior, nobody should be doing either of those two
things.

Also, the correct case is much more common, and not doing it
automatically was causing bugs.

Fixes #3280

gtk/gtktreeview.c
gtk/gtktreeviewcolumn.c
gtk/gtkwidget.c

index 315360c6832beae98a1e38175e7bc3c793493dd5..4c76f0405d3d33a00a649b9e9e46a617583138d6 100644 (file)
@@ -10790,10 +10790,12 @@ gtk_tree_view_insert_column (GtkTreeView       *tree_view,
                                            column, position);
   priv->n_columns++;
 
-  gtk_tree_view_update_button_position (tree_view, column);
-
   _gtk_tree_view_column_set_tree_view (column, tree_view);
 
+  /* XXX: We need to reparent the node into the header, somebody make that a real widget */
+  gtk_css_node_set_parent (gtk_widget_get_css_node (gtk_tree_view_column_get_button (column)), NULL);
+  gtk_tree_view_update_button_position (tree_view, column);
+
   if (gtk_widget_get_realized (GTK_WIDGET (tree_view)))
     {
       GList *list;
index 32f640b354053002e81dead2008a8f181afbbc89..f22418219217957fdb6d814579e59de0175a1a55 100644 (file)
@@ -1324,7 +1324,8 @@ _gtk_tree_view_column_set_tree_view (GtkTreeViewColumn *column,
 
   priv->tree_view = GTK_WIDGET (tree_view);
 
-  gtk_widget_set_parent (priv->button, GTK_WIDGET (tree_view));
+  /* avoid a warning with our messed up CSS nodes */
+  gtk_widget_insert_after (priv->button, GTK_WIDGET (tree_view), NULL);
 
   priv->property_changed_signal =
     g_signal_connect_swapped (tree_view,
index 29f595c55aea45cf45bbb01c4b5494be339956e1..014772acb2bb926462e4a10e60b1271ab0636ac6 100644 (file)
@@ -5741,12 +5741,9 @@ gtk_widget_reposition_after (GtkWidget *widget,
   data.flags_to_unset = 0;
   gtk_widget_propagate_state (widget, &data);
 
-  if (gtk_css_node_get_parent (priv->cssnode) == NULL)
-    {
-      gtk_css_node_insert_after (parent->priv->cssnode,
-                                 priv->cssnode,
-                                 previous_sibling ? previous_sibling->priv->cssnode : NULL);
-    }
+  gtk_css_node_insert_after (parent->priv->cssnode,
+                             priv->cssnode,
+                             previous_sibling ? previous_sibling->priv->cssnode : NULL);
 
   _gtk_widget_update_parent_muxer (widget);